package com.abc.dto.request;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

import java.util.List;

/**
 * @author 可爱小欣憨宝
 * @description API请求的JavaBean封装
 * @create 2024-10-26 22:00
 */
@Data
public class ApiRequestRequestDto {

    /**
     * 指定访问的模型版本:
     * - lite指向Lite版本
     * - generalv3指向Pro版本
     * - pro-128k指向Pro-128K版本
     * - generalv3.5指向Max版本
     * - max-32k指向Max-32K版本
     * - 4.0Ultra指向4.0 Ultra版本
     */
    @JSONField(name = "model")
    private String model = "lite";

    /**
     * 用户的唯一id，表示一个用户，例如 user_123456
     */
    @JSONField(name = "user")
    private String user;

    /**
     * 输入数组，包含消息内容
     */
    @JSONField(name = "messages")
    private List<Message> messages;

    /**
     * 核采样阈值，取值范围[0, 2]，默认值1.0
     */
    @JSONField(name = "temperature")
    private Float temperature;

    /**
     * 核采样方法概率阈值，取值范围(0, 1]，默认值1
     */
    @JSONField(name = "top_p")
    private Integer topP;

    /**
     * 从k个中随机选择一个，取值范围[1, 6]，默认值4
     */
    @JSONField(name = "top_k")
    private Integer topK;

    /**
     * 重复词的惩罚值，取值范围[-2.0, 2.0]，默认0
     */
    @JSONField(name = "presence_penalty")
    private Float presencePenalty;

    /**
     * 频率惩罚值，取值范围[-2.0, 2.0]，默认0
     */
    @JSONField(name = "frequency_penalty")
    private Float frequencyPenalty;

    /**
     * 是否流式返回结果，默认false表示非流式
     */
    @JSONField(name = "stream")
    private Boolean stream = true;

    /**
     * 模型回答的tokens的最大长度
     * - Pro、Max、Max-32K、4.0 Ultra 取值为[1,8192]，默认为4096
     * - Lite、Pro-128K 取值为[1,4096]，默认为4096
     */
    @JSONField(name = "max_tokens")
    private Integer maxTokens;

    /**
     * 指定模型的输出格式
     */
    @JSONField(name = "response_format")
    private ResponseFormat responseFormat;

    /**
     * 工具参数，用于扩展功能
     */
    @JSONField(name = "tools")
    private List<Tool> tools;

    /**
     * 设置模型自动选择调用的函数：
     * auto：传了tool时默认为auto，模型自动选择调用的函数
     * none：模型禁用函数调用
     * required：模型始终选择一个或多个函数进行调用
     * {"type": "function", "function": {"name": "my_function"}} ：模型强制调用指定函数
     */
    @JSONField(name = "tool_choice")
    private String toolChoice;



}
